std::move
在以下片段中是否有必要?
std::functionmy_std_function; void call(std::function && other_function) { my_std_function.swap(std::move(other_function)); }
据我所知call()
接受一个右值引用..但由于右值引用本身就是一个左值,为了调用swap(std::function
我必须将它重新转换为右值引用std::move
我的推理是正确的还是std::move
在这种情况下可以省略(如果可以,为什么?)
std::function::swap
不通过右值参考获取其参数.它只是一个常规的非const
左值参考.因此std::move
无益(并且可能不应该编译,因为不允许rvalue引用绑定到非const
左值引用).
other_function
也不需要是右值参考.
签名是
void std::function::swap( function& other )
所以代码不应该编译std::move
(msvc有扩展名允许这种绑定:/)
当你采用r值引用时,我认为在你的情况下你想要的是一个简单的赋值:
std::functionmy_std_function; void call(std::function && other_function) { my_std_function = std::move(other_function); // Move here to avoid copy }